/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package com.wcs.netbeans.liquiface.ui.wizards.addfk; /* * #%L * Liquiface - GUI for Liquibase * %% * Copyright (C) 2013 Webstar Csoport Kft. * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ import com.wcs.netbeans.liquiface.facade.ModelFacade; import com.wcs.netbeans.liquiface.model.Column; import com.wcs.netbeans.liquiface.model.PrimaryKeyConstraint; import com.wcs.netbeans.liquiface.model.Table; import com.wcs.netbeans.liquiface.model.UniqueConstraint; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultCellEditor; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; public final class AddForeignKeyVisualPanel1 extends JPanel { private String tableName; private boolean referencesUniqueColumn = false; /** * Creates new form AddForeignKeyVisualPanel1 */ public AddForeignKeyVisualPanel1(String tableName) { initComponents(); this.tableName = tableName; List<Table> tables = ModelFacade.getInstance().getTables(); List<String> tableNames = new ArrayList<String>(); tableNames.add(""); for (Table table : tables) { tableNames.add(table.getName()); } referencedTableField.setModel(new DefaultComboBoxModel(tableNames.toArray())); referencedTableField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String referencedTableName = (String) referencedTableField.getSelectedItem(); if (!"".equals(referencedTableName)) { List<String> constraintNames = new ArrayList<String>(); constraintNames.add(""); Table referencedTable = ModelFacade.getInstance().getTableByName(referencedTableName); PrimaryKeyConstraint pk = referencedTable.getPrimaryKeyConstraint(); if (pk != null) { constraintNames.add(pk.getName()); } for (UniqueConstraint uniqueConstraint : referencedTable.getUniqueConstraints()) { constraintNames.add(uniqueConstraint.getName()); } referencedConstraintField.setModel(new DefaultComboBoxModel(constraintNames.toArray())); columnsTable.setModel(new AddForeignKeyTableModel( new Object[][] {}, new String [] {"Referenced column", "Local column"} )); } } }); referencedConstraintField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { String referencedTableName = (String) referencedTableField.getSelectedItem(); String referencedConstraintName = (String) referencedConstraintField.getSelectedItem(); if (!"".equals(referencedTableName) && !"".equals(referencedConstraintName)) { Table referencedTable = ModelFacade.getInstance().getTableByName(referencedTableName); PrimaryKeyConstraint pk = referencedTable.getPrimaryKeyConstraint(); List<Column> columns = new ArrayList<Column>(); if (pk != null && pk.getName().equals(referencedConstraintName)) { columns = pk.getColumns(); referencesUniqueColumn = true; } else { for (UniqueConstraint uniqueConstraint : referencedTable.getUniqueConstraints()) { if (uniqueConstraint.getName().equals(referencedConstraintName)) { columns = uniqueConstraint.getColumns(); referencesUniqueColumn = true; break; } } } Object[][] rows = new Object[columns.size()][2]; for (int i = 0; i < columns.size(); i++) { rows[i] = new Object[] { columns.get(i).getName(), null }; } columnsTable.setModel(new AddForeignKeyTableModel( rows, new String [] {"Referenced column", "Local column"} )); columnsTable.getColumnModel().getColumn(1).setCellEditor(new DefaultCellEditor(new JComboBox(getCurrentTableAllColumns().toArray()))); } } }); } // private List<String> getCurrentTableColumns(ColumnType columnType) { // Table table = ModelFacade.getInstance().getTableByName(tableName); // List<String> columns = new ArrayList<String>(); // for (Column column : table.getColumns()) { // if (column.getColumnType().equals(columnType)) { // columns.add(column.getName()); // } // } // return columns; // } private List<String> getCurrentTableAllColumns() { Table table = ModelFacade.getInstance().getTableByName(tableName); List<String> columns = new ArrayList<String>(); for (Column column : table.getColumns()) { columns.add(column.getName()); } return columns; } @Override public String getName() { return "Foreign key"; } /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The * content of this method is always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jLabel1 = new javax.swing.JLabel(); fkNameField = new javax.swing.JTextField(); referencedTableField = new javax.swing.JComboBox(); jLabel2 = new javax.swing.JLabel(); referencedConstraintField = new javax.swing.JComboBox(); jLabel3 = new javax.swing.JLabel(); jSeparator1 = new javax.swing.JSeparator(); jScrollPane1 = new javax.swing.JScrollPane(); columnsTable = new javax.swing.JTable(); org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(AddForeignKeyVisualPanel1.class, "AddForeignKeyVisualPanel1.jLabel1.text")); // NOI18N fkNameField.setText(org.openide.util.NbBundle.getMessage(AddForeignKeyVisualPanel1.class, "AddForeignKeyVisualPanel1.fkNameField.text")); // NOI18N referencedTableField.setModel(new javax.swing.DefaultComboBoxModel(new String[] {})); org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(AddForeignKeyVisualPanel1.class, "AddForeignKeyVisualPanel1.jLabel2.text")); // NOI18N referencedConstraintField.setModel(new javax.swing.DefaultComboBoxModel(new String[]{})); org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(AddForeignKeyVisualPanel1.class, "AddForeignKeyVisualPanel1.jLabel3.text")); // NOI18N columnsTable.setModel(new javax.swing.table.DefaultTableModel( new Object [][] { }, new String [] { "Referenced column", "Local column" } )); jScrollPane1.setViewportView(columnsTable); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel3) .addComponent(jLabel2) .addComponent(jLabel1)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(referencedTableField, 0, 161, Short.MAX_VALUE) .addComponent(fkNameField) .addComponent(referencedConstraintField, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGap(110, 110, 110)) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addComponent(jSeparator1)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(fkNameField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(referencedTableField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(referencedConstraintField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel3)) .addGap(13, 13, 13) .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// </editor-fold>//GEN-END:initComponents // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JTable columnsTable; private javax.swing.JTextField fkNameField; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JSeparator jSeparator1; private javax.swing.JComboBox referencedConstraintField; private javax.swing.JComboBox referencedTableField; // End of variables declaration//GEN-END:variables public JTable getColumnsTable() { return columnsTable; } public JTextField getFkNameField() { return fkNameField; } public JComboBox getReferencedConstraintField() { return referencedConstraintField; } public JComboBox getReferencedTableField() { return referencedTableField; } public boolean isReferencesUniqueColumn() { return referencesUniqueColumn; } }